A “cluster” is a system that includes a plurality of nodes that, for the purposes of providing access to data, appear to clients as a single unit. Within a cluster, each node typically has its own processor(s) and volatile memory. Typically, the nodes of a cluster are able to communicate with each other using a communication mechanism, such as a network.
In a database system cluster, a database server instance executes on each node in the cluster. In such a cluster, a “working set” can be cached among different nodes. The “working set” includes data blocks that are actively used by the applications that are the clients of the cluster. In some clusters, replicas of such data blocks may be stored on a shared disk that each of the cluster's nodes can access. Replicas of such data blocks also may be stored in the caches of various nodes in the cluster. Some replicas of a data block may be more current than other replicas of that data block; replicas may be different versions of the same data block.
In some cluster configurations, a middle tier is situated in between the cluster's nodes and the clients. The middle tier may include several application servers (e.g., web servers), for example. The middle tier may receive requests from the clients (e.g., web browsers). The middle tier may route those requests among the cluster's nodes. In order to balance the request workload among the nodes, so that no particular node is overworked while other nodes sit idle, the middle tier may route requests to different nodes. Sometimes, the middle tier may route to different nodes requests that are related to the same data. For example, the middle tier may route, to a first node, a user's request to update the contents of that user's shopping cart, but then the middle tier may route, to a second node, the same user's request to view the contents of that user's shopping cart.
Before a particular node can perform request-specified operations on a particular data block's data, the particular node needs to have a current version of the particular data block. Often, the particular node will not have a current version of the particular data block in the particular node's cache, but a current version of the particular data block will be located in another node's cache. The particular node will then need to obtain the current version of the particular data block from the other node. When the middle tier widely disperses, among many different nodes, requests that are related to the same data, a significant amount of inter-node data block copying, or “shipping,” may occur between the nodes. Unfortunately, each time that a data block replica is shipped from one node to another (over the inter-node communication mechanism), the cluster's performance suffers a bit.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.